package com.example.controller;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.poi.excel.ExcelUtil;
import com.example.common.Result;
import com.example.entity.Params;
import com.example.entity.Student;
import com.example.entity.Type;
import com.example.service.StudentService;
import com.example.service.TypeService;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/student")
@Slf4j
@RequiredArgsConstructor
public class StudentController {

    private final StudentService studentService;

//    @PostMapping
//    public Result save(@RequestBody Student student) {
//        if (student.getId() == null) {
//            studentService.add(student);
//        } else {
//            studentService.update(student);
//        }
//        return Result.success();
//    }

    @GetMapping("/search")
    public Result findBySearch(Params params) {
        PageInfo<Student> info = studentService.findBySearch(params);
        log.info("招生{}",params);
        return Result.success(info);
    }

//    @DeleteMapping("/{id}")
//    public Result delete(@PathVariable Integer id) {
//        typeService.delete(id);
//        return Result.success();
//    }
//
    @PutMapping("/delBatch")
    public Result delBatch(@RequestBody List<Student> list) {
        for (Student student : list) {
            studentService.delete(student.getId());
        }
        return Result.success();
    }
//
//    @GetMapping("/export")
//    public Result export(HttpServletResponse response) throws IOException {
//        // 思考：
//        // 要一行一行的组装数据，塞到一个list里面
//        // 每一行数据，其实就对应数据库表中的一行数据，也就是对应Java的一个实体类Type
//        // 我们怎么知道它某一列就是对应某个表头呢？？ 需要映射数据，我们需要一个Map<key,value>，把这个map塞到list里
//
//        // 干！
//        // 1. 从数据库中查询出所有数据
//        List<Type> all = typeService.findAll();
//
//        if (CollectionUtil.isEmpty(all)) {
//            throw new CustomException("未找到数据");
//        }
//
//        // 2. 定义一个 List，存储处理之后的数据，用于塞到 list 里
//        List<Map<String, Object>> list = new ArrayList<>(all.size());
//
//        // 3. 定义Map<key,value> 出来，遍历每一条数据，然后封装到 Map<key,value> 里，把这个 map 塞到 list 里
//        for (Type type : all) {
//            Map<String, Object> row = new HashMap<>();
//            row.put("分类名称", type.getName());
//            row.put("分类描述", type.getDescription());
//
//            list.add(row);
//        }
//
//        // 4. 创建一个 ExcelWriter，把 list 数据用这个writer写出来（生成出来）
//        ExcelWriter wr = ExcelUtil.getWriter(true);
//        wr.write(list, true);
//
//        // 5. 把这个 excel 下载下来
//        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
//        response.setHeader("Content-Disposition","attachment;filename=type.xlsx");
//        ServletOutputStream out = response.getOutputStream();
//        wr.flush(out, true);
//        wr.close();
//        IoUtil.close(System.out);
//
//
//        return Result.success();
//    }
//
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        List<Student> infoList = ExcelUtil.getReader(file.getInputStream()).readAll(Student.class);
        if (!CollectionUtil.isEmpty(infoList)) {
            for (Student student : infoList) {
                try {
                    studentService.add(student);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return Result.success();
    }

}
